package com.cnzhy.service;

import com.cnzhy.entity.CrmAdminUser;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * @author 赵 岩
 * FeignClient的value对应调用服务的spring.applicatoin.name
 * Feign的一个机制就是使用了动态代理，如果你对某个接口定义了@FeignClient注解，那么Feign就会针对这个接口创建一个动态代理。
 * 然后，你调用这个接口的时候，其实就是调用了Feign为这个接口创建的动态代理，这个是核心中的核心，
 * Feign的动态代理会根据你在接口的定义的@RequestMapping等注解，来动态构造你要请求的服务地址，最后根据这个地址发送请求，解析相应。
 */
@Service
@FeignClient(value = "producer") //该例子定义了一个feign客户端，将远程服务http://producer/xxx 映射为一个本地Java方法调用。
public interface UserFeignService {

    /**
     * 获取信息
     */
    @GetMapping("/get")
    String getMessage(@RequestParam("name") String name);

    /**
     * 获取用户
     */
    @GetMapping("user/{userId}")
    CrmAdminUser getCrmAdminUser(@PathVariable long userId);

    /**
     * 查询所有用户
     */
    @GetMapping("users")
    List<CrmAdminUser> getAllCrmAdminUsers();

}
